package com.ppch.wuwamanus.tools;

import cn.hutool.core.io.FileUtil;
import cn.hutool.core.util.IdUtil;
import com.itextpdf.kernel.font.PdfFont;
import com.itextpdf.kernel.font.PdfFontFactory;
import com.itextpdf.kernel.pdf.PdfDocument;
import com.itextpdf.kernel.pdf.PdfWriter;
import com.itextpdf.layout.Document;
import com.itextpdf.layout.element.Paragraph;
import org.springframework.ai.tool.annotation.Tool;
import org.springframework.ai.tool.annotation.ToolParam;

import java.io.IOException;
import java.nio.file.Paths;


/**
 * Package:ppch-ai-agent
 * ClassName:FileOperationTool
 *
 * @Author 泡泡茶壶
 * @Create 2025/7/18 17:16
 * @Version 1.0
 * Description:
 *  PDF生成工具（使用 itext 库实现）
 */
public class PDFGenerationTool {

    @Tool(description = "根据用户要求的内容生成对应的PDF文件")
    public String generatePDF(
            @ToolParam(description = "要生成的PDF的文件名称，如果用户没有指定就随机生成一个" +
                    "或提取用户要求中的主旨作为文件名，但是名字尽量简短，注意PDF文件要以.pdf结尾") String fileName,
            @ToolParam(description = "PDF的内容") String content) {
        String fileDir = FilePath.FILE_SAVE_PATH + "/pdf";

        //使用HuTool的雪花算法生成一个随机的文件名
        fileName = IdUtil.getSnowflake().nextIdStr() + ".pdf";

        String filePath = fileDir +"/"+ fileName;
        try {
            // 创建目录
            FileUtil.mkdir(fileDir);
            // 创建 PdfWriter 和 PdfDocument 对象
            try (PdfWriter writer = new PdfWriter( filePath);
                 PdfDocument pdf = new PdfDocument(writer);
                 Document document = new Document(pdf)) {
                // 自定义字体（需要人工下载字体文件到特定目录）
                String fontPath = Paths.get("src/main/resources/font_type/yasong.ttf")
                        .toAbsolutePath().toString();
                PdfFont font = PdfFontFactory.createFont(fontPath,
                        PdfFontFactory.EmbeddingStrategy.PREFER_EMBEDDED);
                // 使用内置中文字体
                //PdfFont font = PdfFontFactory.createFont("STSongStd-Light", "UniGB-UCS2-H");
                document.setFont(font);
                // 创建段落
                Paragraph paragraph = new Paragraph(content);
                // 添加段落并关闭文档
                document.add(paragraph);
            }
            return filePath;
        } catch (IOException e) {
            return "PDF生成失败: " + e.getMessage();
        }
    }
}
